package com.chixing.day03_oop;

public class Homework {
    public static void main(String[] args) {
       /* 知识点复习
        1. Java 环境变量配置
        2. Java源文件执行原理
        3. 标识符（命名规则）
        4. 运算符 （注意 ++a , a++ , && 与 & ， || 与 | 的区别， 三目运算）
        5. 流程控制（if-else,switch-case后面能跟的数据类型，3种循环）
        6. 数组
        7. 常用的排序
        */
       /*
       1.（为什么）因为电脑不知道javac这个命令的是在哪一个路径里面，所有要进行配置，让电脑知道路径所在
          （配置）：（1）找到jdk的路径的根目录，在我的电脑->属性->高级系统设置->系统变量->编辑->新建（变量：JAVA_HOME，值：jdk的根目录）
                   （2）找到系统变量中的path：（系统变量->编辑->新建—>%JAVA_HOME%\bin(实际上就是jdk的bin目录所在的路径）
                   （3）CLASSPATH: (系统变量->编辑->新建->(变量名CLASSPATH     变量值为jdk的lib目录       .;%JAVA_HOME%\lib))
                   检验是否配置成功：
                   找到cmd命令窗口，以管理员的身份运行或者直接在jdk bin目录所在的路径中输入cmd 跳转到cmd窗口，输入java-version 回车 -》输入javac 回车  输入java回车
                   如果不报错  则配置成功
        2.  原理：  编写的java源文件---->【编译】---->字节码文件------>【运行】---->结果
                                       javac命令                    java命令
        3.以数字、字母、下划线_ 、美元符$ 组成 ，不能以数字开头，不能是关键字
        4.++a和a++ 遵循就近原则  前者是先+1后赋值  后者是先赋值后+1
           &&和&  ：
                      &&：逻辑运算符（短路与）：如果前一个条件为false，直接输出结果 false
                      &：按位运算符：同true为true 两个条件都要运行
           || 与 | 的区别：与上雷同
                       ||：短路或，如果前一个条件为true，直接输出结果 true
                       |：同false为false 两个条件都要运行
           三目运算：a>b?a:b;  判断a是否大于b 如果是 输出a 否则输出b
        5.数组属于引用类型，         数组的三个特性：定长、类型相同、物理地址连续
           两种定义方式：
                   一维数组：
                     int[]  a={1,2,3,....};
                     int[] a=new int[n];
                   二维数组：
                   int[][] b=new int[2][3]; 表示两行三列
                   数组有一个工具类Arrays.方法()
         6. 常用排序：冒泡和快速
              冒泡：相邻元素作比，交换位置
              快速：
        */
//编程题
//        1.设计一程序,输出杨辉三角. 输出如下:   ( 提示: 采用二维数组来完成.)
        //创建一个二维数组
        int[][] arr=new int[8][8];
        for(int i=0;i<arr.length;i++){
            //给数组进行赋值
            arr[i]=new int[i+1];
            //每一行的第一个和最后一个元素的值都为1，对其进行赋值
            arr[i][0]=1;
            arr[i][i]=1;
            //对每行的除首尾元素进行赋值
            for(int j=1;j<arr[i].length-1;j++){
                arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
            }

        }

//        对数组进行遍历

        for (int k = 0; k < arr.length; k++) {
            for (int f = 0; f < arr[k].length; f++) {
                System.out.print(arr[k][f] + " ");
            }

            System.out.println();
        }

        //拓展2.判断是否是丑数
        int count = 1;
        int uglyIndex = 18; // 找出第10个丑数


        for(int i =2; i<=100;i++){ // i =  14
            boolean isUglyNumber = true;

            if( i %2 ==0 || i %3 == 0 || i % 5 ==0){
                for(int j=i-1;j>5;j--  ){
                    boolean result = isPrime(j);
                    if(result && i % j ==0){
                        // System.out.println("当前数字：" + i + "，不是丑数");
                        isUglyNumber = false;
                        break;
                    }
                }
            }else{
                isUglyNumber = false;
            }
            if(isUglyNumber) {
                System.out.println("当前数字：" + i + "是丑数");
                count++;
                if(count == uglyIndex) {
                    System.out.println("第"+ uglyIndex +"个丑数是：" + i);
                    break;
                }
            }
        }

    }


    // 判断是不是素数
    public  static  boolean isPrime(int num){
        for(int i=2;i<=num-1;i++  ){
            if(num %i == 0)
                return false;
        }
        return true;
    }


}

